package study.lagou.com.dao.impl;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import study.lagou.com.dao.IUserDao;
import study.lagou.com.pojo.User;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

/**
 * @Description: 功能描述
 * @Author houjh
 * @Email: happyxiaohou@gmail.com
 * @Date: 2021-3-23 15:19
 */
public class UserDaoImpl implements IUserDao {

    @Override
    public List<User> findAll() throws IOException {
        //1、Resources工具类，完成配置文件的加载，将配置文件加载成字节输入流
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        //2、SqlSessionFactoryBuilder通过构建者模式解析配置文件，并创建了sqlSessionFactory工厂
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //3、sqlSessionFactory通过工厂模式来创建sqlSession,此处需要注意sqlSessionFactory.openSession()会默认开启一个事务，但是
        //该事务不会自动提交，在进行增删改操作时，需要手动提交事务，也要直接通过sqlSessionFactory.openSession(true)方法来设置自动提
        //交事务信息
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //4、sqlSession调用方法，查询所有调用selectList 查询单个调用selectOne 添加调用insert 修改调用update 删除调用delete
        List<User> users = sqlSession.selectList("study.lagou.com.mapper.findAll");
        //方法调用完成注意关闭sqlSession
        sqlSession.close();
        return users;
    }
}
